package com.linkgie.galaxyframework.persistence.data;

import com.linkgie.galaxyframework.utils.bean.FieldSelect;

public interface JoinQueryMappingOperator<L, R, V> extends EntityQueryOperator<V> {

    // LeftMappingOperator<L, R> left();
    // RightMappingOperator<L, R> right();

    /**
     * 选择将左表所有字段映射到查询结果；
     * <p>
     * 注意：如果左表和右表有相同的字段，那么右表的字段会覆盖左表的字段；
     * 
     * @return
     */
    JoinQueryMappingOperator<L, R, V> left();

    /**
     * 选择将右表所有字段映射到查询结果；
     * 
     * <p>
     * 注意：如果左表和右表有相同的字段，那么右表的字段会覆盖左表的字段；
     * 
     * @return
     */
    JoinQueryMappingOperator<L, R, V> right();

    /**
     * 选择将左表指定字段映射到查询结果；
     *
     * @param fieldSelectFunction 左表字段选择函数；
     * @return
     */
    FieldMapping<V, JoinQueryMappingOperator<L, R, V>> left(FieldSelect<L> fieldSelectFunction);

    /**
     * 选择将右表指定字段映射到查询结果；
     *
     * @param fieldSelectFunction 右表字段选择函数；
     * @return
     */
    FieldMapping<V, JoinQueryMappingOperator<L, R, V>> right(FieldSelect<R> fieldSelectFunction);

}
